import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Tools {
    // 运行测试
    public static void main(String[] args) {
        String path = "D:\\mycode\\javacode"; // 指定目录路径
        String suffix = ".java"; // 指定文件后缀
        File a = new File(path); // 创建文件对象
        long totalLines = findFiles(a, suffix);
        System.out.println("Total lines of code: " + totalLines);
    }

    // 方法实现
    public static long findFiles(File a, String suffix) {
        long totalLines = 0; // 用于统计总行数
        File[] files = a.listFiles(); // 该对象下的所有文件和目录
        if (files != null) {
            for (File file : files) {
                // 判断是否为目录，为目录则递归
                if (file.isDirectory()) {
                    totalLines += findFiles(file, suffix); // 递归并累加行数
                } else if (file.getName().endsWith(suffix)) {
                    totalLines += countLinesInFile(file); // 统计当前文件的行数并累加
                }
            }
        }
        return totalLines;
    }

    // 辅助方法，用于统计单个文件的代码行数
    public static long countLinesInFile(File file) {
        long lines = 0;
        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = reader.readLine()) != null) {
                // 过滤掉空行和注释行
                if (!line.trim().isEmpty() && !line.trim().startsWith("//")) {
                    lines++;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return lines;
    }
}

